//==================================================================================================
var a = [];
for (let i = 0; i < 10; i++) {
    a[i] = function () {
        console.log(i);
    }
}

a[6]();// 6  ====== let声明的变量仅在块级作用域有效，即这里的i只在本轮循环有效果，每次循环的i其实都是一个新的变量


var a = [];
for (var i = 0, console.log(i); i < 10; i++) {
    a[i] = function () {
        console.log(i);
    }
}

a[6]();// 10   当前代码下声明的变量a和变量i都是全局变量,在执行`a[6]()`时,for循环已经结束，i已经修改为10




//==================================================================================================
var tmp = 123;
if (true) {
    /**
     * 只要块级作用域内存在let命令，它所声明的变量就“绑定”（binding）这个区域，不再受外部的影响;
     * 因块级作用域，在代码块内，使用let命令声明变量之前，该变量都是不可用的(暂时性死区)
     */
    console.log(tmp);  // Uncaught ReferenceError: Cannot access 'tmp' before initialization
    // let tmp; 
}


//==================================================================================================
var arr = [12, 34, 32, 89, 4, 9];
function sorted(arr) {
    let min = arr.shift();
    for (let item of arr) {
        if (min > item) min = item;
    }
    return min;
}

console.log(sorted(arr)); // 4


//==================================================================================================
this.a = 90
var a = 10;
var obj = {
    a: 20,
    fn() {
        setTimeout(() => { // fn_1
            console.log(this.a);
        }, 0);
        function fn() { // fn_2
            console.log(this);
        }
        setTimeout(function () {// fn_3
            console.log(this);
        }, 0);
        setTimeout(fn, 0);
    }
}

obj.fn();  //沿着作用域向上找到最近的一个function, 看这个function最终被谁调用，即this指向该调用对象; fn_1中的this是obj;fn_2\fn_3中的this是使用时所在的对象


//==================================================================================================
function PromiseFn(fn) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("function" == typeof fn ? fn() : fn);
        }, 10);
    })
}

PromiseFn("hello").then(value => {
    return PromiseFn(() => ([value, "lagou"]));
}).then(value => {
    console.log([...value, "I lovu U"].join(","));
});














